package com.zhanglijie.base.sync;

/**
 * @author zhanglijie
 * @version 1.0
 * @since 1.1.0 2022/6/5 0005 15:57
 * 锁标志
 * 在方法上是一个acc_sync标识
 * 在代码块上是个监视器
 */
public class Flag {

    public static void main(String[] args) {

    }

    /**
     * 锁代码块的字节码--监视器
     * 监视器退出有两，一个是正常退出 一个是异常退出释放锁
     * 1.6 之前就是重量级锁
     * 1.6 无锁-》偏向锁-》轻量级锁-》重量级锁（park|unpark)  用户态-》内核态 耗性能
     */
    public void func1(){

        synchronized (Flag.class){
            try {
                Flag.class.wait();
            }catch (Exception e){}
            System.out.println("同步 代码块" );

        }
    }

    /**
     * ACC_SYNCHRONIZED
     */
    public synchronized void func2(){
        System.out.println("同步 成员函数");
    }

    /**
     * ACC_SYNCHRONIZED
     */
    public static synchronized void func3(){
        System.out.println("同步 静态函数");
    }


}
